package com.java.yz.day13.ketang;

/*
    递归:在方法定义时，方法内部调用方法自身的现象叫做递归。
        Math.max(a, Math.max(c,d));这个不叫递归，这个叫方法的嵌套使用
        sb.append("你好").append(12);这个不叫递归，这个叫方法的链式调用
    举例:
        1、从前有座山，山里有座庙，庙里有一个老和尚，老和尚在给小和尚讲故事: 1
            从前有座山，山里有座庙，庙里有一个老和尚，老和尚在给小和尚讲故事:    2
            从前有座山，山里有座庙，庙里有一个老和尚，老和尚在给小和尚讲故事:    3
            从前有座山，山里有座庙，庙里有一个老和尚，老和尚在给小和尚讲故事:    4
            什么时候结束呢?老和尚圆寂了，或者山崩塌了，或者小和尚还俗了。

        2、学习大数据的目的是，找工作，挣钱，取老婆，生娃:
            学习大数据的目的是，找工作，挣钱，取老婆，生娃:
            学习大数据的目的是，找工作，挣钱，取老婆，生娃:
            学习大数据的目的是,找工作，挣钱，取老婆，生娃:
                                                    ..
    结束条件:娶不到老婆，或者是娃不是自己的，或者找不到工作。
    举了例子之后发现，方法的递归，必须要有一个出口（结束条件)，如果没有这个出口就是死递归。

 */
public class diGuiDemo1 {
    public static void main(String[] args) {
        //求5的阶乘  5*4*3*2*1
        //因为方法不是静态的，所以要创建对象
        diGuiDemo1 diGuiDemo1 = new diGuiDemo1();
        //打印结果为120， 这个递归一定要有出口，否则就会一直调用，直至栈溢出报错（死递归）
        System.out.println(diGuiDemo1.fun1(5));

    }
    public  int fun1(int num){
        if(num==1){
            return 1;
        }
        else {  //这就形成了一个递归，方法调用自己
            return num*fun1(num-1);
        }
    }
}
